outer join의 이해 :: 오라클 실습[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

오라클 실습
[1]
등록일:2009-05-28 00:11:12 (0%)
작성자:
제목:outer join의 이해
코드  테이블인  tab1과  이를  참조하는  tab2를  조인하여  코드값에  해당하는  tab2의  자료를  조회하고  싶은  경우의  예이다.
select  x.key,  x.fld1,  y.key,  y.col1,  y.col2
  from  tab1  x,  tab2  y
where  x.key  =  y.key(+)
    and  x.fld1  >  ‘aaa’
    and  y.col1  =  10;

이  경우는  tab1에  null이  있기    때문에  원하는  결과가  나오지  못한다.  그러므로  다음과  같이  변형한다.
select  x.key,  x.fld1,  y.key,  y.col1,  y.col2
  from  tab1  x,  tab2  y
where  x.key  =  y.key(+)
and  x.fld1  >  ‘aaa’
and  (y.col1  =  10  or  y.col  is  null);

로  바꾸면  원하는  결과를  얻을  수  있다.  그러나  null이  있기  때문에  인덱스를  사용하지  못한다.  
<개선안>
select  x.key,  x.fld1,  y.key,  y.col1,  y.col2
from  tab1  x,  tab2  y
where  x.key  =  y.key(+)
and  x.fld1  >  ‘aaa’
and  y.col1(+)  =  10;

(+)기호가  붙지  않은  테이블부터  풀리게  되며  (+)기호가  붙은  쪽  테이블의  모든  컬럼에  (+)기호를  붙여  주어야  한다.  왜냐하면  (+)기호가  붙은  쪽의  컬럼에  의해  걸러져  버리기  때문이다.

&#61482;  Outer  join에서  in의  사용  
In  연산자는  아우터  조인에서  사용하지  못하므로  다음과  같이  In-Line  View를  사용하여  변형한다.

예)  select  x.key,  x.fld1,  y.key,  y.col1,  y.col2
from    tab1  x,  tab2  y
where  x.key  =  y.key(+)
and  x.fld1  >  ‘aaa’
and  y.col1(+)  in  (10,30,50);
은  사용되지  못한다.  (in,  between,  like,  or연산자는  아우터조인과  사용하지  못함)
  
<해결안>
select  x.key,  x.fld1,  y.key,  y.col1,  y.col2
from  tab1  x,  (select  key,  col1,  col2
                                          from  tab2  
                                          where  col1  in  (10,30,50))  y  
where  x.key  =  y.key(+)
and  x.fld1  >  ‘aaa’;
[본문링크] outer join의 이해
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=31494
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.